Flipping Signs
ABC125
任意の数を1つだけ選んで負にするということは可能か?
もし可能なら、問題設定を無視して自由に選んで負にできるはずだ
これは不可能
ある数$ iについて、$ A_iを負にしたい場合、$ A_{i+1}を負にする必要がある
$ A_{i+1}は選んだ数ではないから正に戻す必要がある
$ A_{i+2}を負にする必要が生じる
これを繰り返すと、$ A_iと$ A_N-1が負になる
言い換えると、任意の2数を選んで負にすることは可能である
おそらく偶数個であれば問題ない
任意の偶数個の数を選んで引き去って、なお最大になるようにする方法
大きい数を引き去ったら、減りが大きい
小さい数を引き去るのが良い
後から読むと、この考え方は問題の解答とは違いそうt6o_o6t.icon
操作を「好きなだけ」行えるなら、行わなくてよい場合もあるから
今回の問題でいえば、引き去る対象が正になってしまうなら、そもそも引き去らなくて良いということ
補足
考えながら書いているので、間違った文章や、思考途中の文章もある
考えながら書かれた例?
注意点として、Aは負になりうる
負の数を先に引き去れば、和はむしろ増える
このケースも、Aをソートして小さい順に引いていけば問題ない
負の数は全て引き去るのが良い
注意すべきケースは、負の数が奇数個あるとき
https://scrapbox.io/files/65086f44045fe0001b2c4556.png
この図の状態で、-1は$ 2m+1個目の負数とする
-1と3を両方引き去ると、-2になって減ってしまう
-4と3だったら、+1となって増えるので良い。
Nが小さいので、小さい順に線形に見ていく
2つずつ数を見ていく
もし、数の和が負であれば、引く
数の和が正であれば、足す
https://atcoder.jp/contests/abc125/submissions/45714219 AC.icont6o_o6t.icon
書いている途中で、奇数個の処理の必要性に気づいた
処理の必要性を思いついたときにコメントに書いておいてよかった
忘れがち